package ${packagePrefix}.domain.event;

import lombok.Getter;
import java.time.LocalDateTime;
import java.util.UUID;

/**
 * ${entityComment}领域事件
 */
@Getter
public class ${domainObjectName}Event {
    
    /**
     * 事件ID
     */
    private final String eventId;
    
    /**
     * 事件发生时间
     */
    private final LocalDateTime occurredOn;
    
    /**
     * ${entityComment}ID
     */
    private final Long ${domainObjectName?uncap_first}Id;
    
    /**
     * 事件类型
     */
    private final ${domainObjectName}EventType eventType;
    
    /**
     * 创建一个新的${entityComment}领域事件
     * 
     * @param ${domainObjectName?uncap_first}Id ${entityComment}ID
     * @param eventType 事件类型
     */
    public ${domainObjectName}Event(Long ${domainObjectName?uncap_first}Id, ${domainObjectName}EventType eventType) {
        this.eventId = UUID.randomUUID().toString();
        this.occurredOn = LocalDateTime.now();
        this.${domainObjectName?uncap_first}Id = ${domainObjectName?uncap_first}Id;
        this.eventType = eventType;
    }
    
    /**
     * ${entityComment}事件类型枚举
     */
    public enum ${domainObjectName}EventType {
        /**
         * 创建事件
         */
        CREATED,
        
        /**
         * 更新事件
         */
        UPDATED,
        
        /**
         * 删除事件
         */
        DELETED
        
        // 根据业务需要添加更多事件类型
    }
} 